MSA 개요

@Wonyu· February 14, 2025 · 7 min read

소프트웨어 아키텍처

현재 많은 시스템이 탄력적이고 Cloud Native 환경으로 구축되어 있다.

📌 주요 특징

Auto scailing: 자동 확장성을 갖는다. 자동으로 인스턴스를 증가할 수 있는 환경이다.
Microservices: 전체 서비스를 구축하고 있는 개별적인모듈이나 기능을 독립적으로 개발하고 배포하고 운영할 수 있도록 세분화된 서비스
Chaos engineering: 시스템에 어떤 변동이나 불확실성에 대해서도 안정적인 서비스 제공
Continuous deployments: 수많은 마이크로 서비스를 비리드하고 배포함에 있어 자동화된 시스템을 구축하고 하나의 작업에서 다른 작업으로 연계되는 과정을 파이프라인으로 연결


Cloud Native

클라우드 환경을 최대한 활용하도록 설계된 시스템 아키텍처를 의미한다.
전통적인 온프레미스 환경과 달리, 클라우드 네이티브 아키텍처는 확장성, 탄력성, 자동화, 장애 복구 등을 중심으로 설계된다.

📌 Architecture

확장 가능한 아키텍쳐

  • 시스템의 수평적 확정에 유연
  • 확장된 서버로 시스템의 부하 분산, 가용성 보장
  • 시스템 또는 서비스 애플리케이션 단위의 패키지
  • 모니터링

탄력적 아키텍쳐

  • 서비스 생성 - 통합 - 배포, 비즈니스 환경 변화에 대응 시간 단축
  • 분할된 서비스 구조
  • 서비스의 추가와 삭제 자동 감지
  • 변경된 서비스 요청에 따라 사용자 요청 처리(동적 처리)

장애 격리

  • 특정 서비스에 오류가 발생해도 다른 서비스에 영향 주지 않음

Monolithic vs Microservice

📌 Monolithic

아키텍쳐

  • 모든 업무로직이 하나의 애플리케이션 형태로 패키지 되어 서비스
  • 애플리케이션에서 사용하는 데이터가 한 곳에 모여 참조되어 서비스되는 형태

장점

  • 개발의 간소화
  • 쉬운 테스트와 디버깅
  • 직관적인 배포
  • 운영의 단순성

단점

  • 확장성의 한계
  • 유연성 부족
  • 유지 보수 어려움
  • 배포 주기 지연
  • 기술 선택의 어려움

📌 Microservice

아키텍쳐

  • 애플리케이션을 여러 개의 독립적인 서비스로 나누어 개발, 배포, 운영

장점

  • 확장성
  • 유지보수 용이
  • 빠른 배포
  • 기술 스택 유연성
  • 장애 격리
  • 분산 개발

단점

  • 운영 복잡성
  • 데이터 일관성 유지 어려움
  • 네트워크 오버헤드
  • 분산 시스템 설계 필요
  • 테스트 및 디버깅 어려움

Microservice Architecture란?

📌 특징

✅ 서비스 간 독립성을 유지하여 개별 배포 및 확장이 가능
✅ API 통신 방식으로 REST API, gRPC, 메시지 큐(Kafka, RabbitMQ) 등 사용 가능
✅ 부하 분산(Load Balancing) 및 스케일링 자동화 지원

📌 언제 도입해야 하나?

✅ MSA로 전환할만큼 시간과 비용이 있는가?
✅ 서비스들이 독립적으로 개발, 운영될 수 있는 경계가 잘 만들어져 있는가?
✅ 각 서비스들이 다른 서비스의 에러로부터 독립적인가?
✅ 서비스들마다 최적화된 언어가 다른가?


SOA vs MSA

📌 SOA(Service-Oriented Architecture)

✅ 여러 개의 독립된 서비스를 상호작용하는 방식으로 구성
✅ 각 서비스는 특정 비즈니스 기능을 수행하며, 이 서비스들을 조합하여 더 큰 시스템이나 애플리케이션을 구성

📌 차이점

서비스의 공유 지향점

  • SOA: 재사용을 통한 비용 절감
  • MSA: 서비스 간의 결합도를 낮춰 변화에 능동적으로 대응

기술 방식

  • SOA: 공통의 서비스를 ESB(Enterprise Service Bus)에 모아 사업 측면에서 공통 서비스 형식으로 서비스 제공
  • MSA: 각 독립된 서비스가 노출된 REST API, gRPC 등을 사용해 통신

서비스 크기

  • SOA: 비교적 크고 통합된 서비스
  • MSA: 작은 단위의 독립적인 서비스

MSA 구성요소

📌 External Gateway(API Gateway)

외부 클라이언트와 내부 마이크로서비스 간의 중간 관문 역할
클라이언트는 서비스로 직접 접근하지 않고 API Gateway를 통해 요청 ex) Spring Cloud Gateway, AWS API Gateway

📌 Service Mesh

마이크로서비스 간 통신을 관리하는 인프라 계층
내부 서비스 간 통신을 관리
ex) AWS App Mesh

📌 Runtime Platform

마이크로서비스를 실행하고 운영하는 환경으로, 컨테이너 오케스트레이션과 배포 담당
ex) Docker, K8s

📌 CI/CD Automation

마이크로서비스의 지속적 빌드, 배포를 자동화하는 시스템
ex) Jenkins, Github Actions

📌 Backing Services

마이크로서비스가 의존하는 외부 데이터 저장소, 메시지 큐, 캐시, 인증 서비스 등 모든 인프라 서비스
ex) MySQL, DynamoDB, Kafka, Redis

📌 Telemetry

마이크로서비스의 상태를 추적하고 모니터링
로그 분석, 분산 트레이싱, 성능 모니터링 등
ex) ELK Stack, Zipkin, Prometheus + Grafana

@Wonyu
Hello :) I'm Wonyu